package com.example.collection

import org.junit.Test

/**
 * <pre>
 * author : zhouronghua
 * e-mail : zhouronghua01@dreamxr.com
 * time : 2023/04/07
 * desc :
 * version: 1.0
 * </pre>
 */
class MapTest {

    @Test
    fun testMap() {
        val map1 = mapOf<String, Double>("Derry" to (100.23), "Joe" to 88.6)
        println(map1)
        // 通过Pair定义Map
        println("=== 通过Pair创建Map ===")
        val map2 = mapOf(Pair("Joker", 100.87), Pair("Lilith", 88.8))
        println(map2)
        println("=== 获取Map元素 ===")
        // 通过下标运算符获取
        println(map1["Derry"])
        // 找不到值不会抛出异常，返回null
        println(map1["Joker"])
        println("=== 获取Map元素 为空使用默认值 ===")
        println(map1.getOrElse("Joker") { "默认值" })
        println(map1.getOrDefault("Joker", 0.00))
        // 转变为可变Map
        println("=== 转换为可变Map===")
        val map3 = map1.toMutableMap()
        map3 += "AAA" to(111.11)
        map3 += "BBB" to 111.11
        map3 += Pair("CCC", 10.08)
        map3["DDD"] = 222.22
        map3.put("EEE", 333.33)
        // 如果Map中没有 FFF Key的元素，我就帮你先添加到Map集合中，然后再从map集合中获取
        val r:Double = map3.getOrPut("FFF") { 555.55 }
        println(r)
        println(map3["FFF"])
    }

    @Test
    fun testMapLoop() {
        println("=== 使用Entry遍历 ===")
        val map2 = mapOf(Pair("Joker", 100.87), Pair("Lilith", 88.8))
        map2.forEach {
            println("Key: ${it.key}, Value ${it.value}")
        }
        println("=== 使用Key, Value遍历 ===")
        // 按照key,value遍历
        map2.forEach { key, value ->
            println("Key: ${key}, Value ${value}")
        }
        println("=== 使用(Key, Value)遍历 ===")
        map2.forEach { (key, value) ->
            println("Key: ${key}, Value ${value}")
        }
        println("=== 使用FOR遍历 ===")
        for (item in map2) {
            println("Key: ${item.key}, Value ${item.value}")
        }
    }
}